/**
 * 
 * 里氏替换原则：
 * 
 * 1。子类不能修改父类的功能
 * 2。任何在能使用父类的地方都要可以使用子类
 * 
 * 里氏替换原则和多态有关系，多态是实现里氏替换的基础。
 */
export { }

// 父类
class AbstractDrink {
    getPrice(): number {
        return 1;
    }
}
// 可乐
class CocaCola extends AbstractDrink {
    getPrice(): any {
        return 3;
    }
}

// 雪碧
class Sprite extends AbstractDrink {
    getPrice(): any {
        return 4;
    }
}

// 芬达
class Fanta extends AbstractDrink {
    getPrice(): any {
        return 5;
    }
}
// 客户
class Customer {
    drink(abstractDrink: AbstractDrink) {
        console.log("花费" + abstractDrink.getPrice());
    }
}
//里氏代换 可以替换，任何可以传父类的地方，都可以把子类传进去 例如：AbstractDrink是父类，可以传父类的地方都可以传子类
//里氏代换是一个原则，要求子类不能违反父类的功能和规定 例如：getPrice要求返回的是数字，子类不能返回其他的值
let c1 = new Customer();
c1.drink(new AbstractDrink());
c1.drink(new CocaCola());
c1.drink(new Sprite());
c1.drink(new Fanta());
